package com.gl.glcourses.repository.jpa;

import java.util.Date;
import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import com.gl.glcourses.repository.IEdicionCursoRepository;
import com.gl.glcourses.vos.EdicionCurso;
import com.gl.glcourses.vos.EstadoEdicionCurso;
import com.gl.glcourses.vos.PresentismoSesionEdicionCurso;
import com.gl.glcourses.vos.TipoCurso;
import com.gl.glcourses.vos.Usuario;
import com.gl.glcourses.vos.Votacion;

@Repository
public class JpaEdicionCursoRepository extends JpaProjectRepository<EdicionCurso> implements IEdicionCursoRepository{

	@SuppressWarnings("unchecked")
	@Override
	public List<EdicionCurso> getEdicionCursoPorEstado(EstadoEdicionCurso estadoEdicionCurso) {
		Query query = null;
		try {
			query = em.createQuery("FROM EdicionCurso as obj WHERE obj.estadoEdicionCurso = :param");
			query.setParameter("param", estadoEdicionCurso);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return (List<EdicionCurso>)query.getResultList();
	}

	@Override
	public EdicionCurso saveEdicion(EdicionCurso edicionCurso) throws Exception {
		EdicionCurso edicionCursoBD = this.saveUpdate(edicionCurso);
		edicionCursoBD = this.findById(edicionCursoBD.getId(), EdicionCurso.class);
		return edicionCursoBD;
	}
		
	@Override
	public List<PresentismoSesionEdicionCurso> buscarPresentismoEdicion(EdicionCurso edicionCurso) {
		Query query = null;
		try {
			query = em.createQuery("FROM PresentismoSesionEdicionCurso as obj WHERE obj.sesionEdicionCurso.edicionCurso = :param");
			query.setParameter("param", edicionCurso);
		} catch (Exception e) {
			e.printStackTrace();
		}
		List<PresentismoSesionEdicionCurso> resultList = (List<PresentismoSesionEdicionCurso>)query.getResultList();
		return resultList;
	}
	
	@Override
	public List<EdicionCurso> getEdicionCursosAprobados(Usuario usuario) {
		Query query = null;
		try{
			query = em.createQuery("SELECT a FROM EdicionCurso a WHERE :param MEMBER OF a.oficina AND a.estadoEdicionCurso = :param2");
			query.setParameter("param", usuario.getOficina());
			query.setParameter("param2", EstadoEdicionCurso.PUBLICADO);
		}catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("sipi");
		return (List<EdicionCurso>)query.getResultList();
		
	}

	@Override
	public List<EdicionCurso> buscarEdicionesCursosDictadas() throws Exception {
		Date hoy = new Date(); 
		Query query = em.createQuery("FROM EdicionCurso as edicionCurso WHERE edicionCurso.fechaHasta <= :param AND edicionCurso.estadoEdicionCurso = :param2");
		query.setParameter("param", hoy);
		query.setParameter("param2", EstadoEdicionCurso.DICTADO);
		return (List<EdicionCurso>) query.getResultList();
	}

}
